function itcast(selector) {
    var dom = document.querySelector(selector);
    var obj = {
        tap: function (cb) {
            // 按下的时间
            var startTime;
            // 按下的坐标
            var startX, startY;
            // 按下
            dom.addEventListener("touchstart", function (e) {
                // 判断按下的手指的个数
                if (e.touches.length > 1) {
                    return;
                }

                // 2 记录按下的时间
                // Date.now() 返回的是 1970 1 1 到现在的毫秒数
                startTime = Date.now();

                // 3 记录按下的坐标
                startX = e.touches[0].clientX;
                startY = e.touches[0].clientY;
            });
            // 离开 松开
            dom.addEventListener("touchend", function (e) {

                // 1 判断手指的个数
                if (e.changedTouches.length > 1) {
                    return;
                }

                // 2 记录离开的时间
                var endTime = Date.now();

                // 判断 按下的时长是否满足要求 300ms
                if (endTime - startTime > 300) {
                    return;
                }


                // 3 记录离开的坐标
                var endX = e.changedTouches[0].clientX;
                var endY = e.changedTouches[0].clientY;

                // 判断滑动的距离 5px
                // 要注意距离 要绝对值 Mats.abs()  -5 => 5
                if (Math.abs(endX - startX) > 5 || Math.abs(endY - startY) > 5) {
                    // 都不满足
                    return;
                }
                // 经过以上的验证  可以触发自己的tap点击的逻辑
                // console.log("自己封装的tap");

                cb(e);

            })
        },
        swipe: function (cb) {

            // 按下时间
            var startTime;
            // 按下的坐标
            var startX, startY;

            // 按下
            dom.addEventListener("touchstart", function (e) {
                // 判断手指的个数
                if (e.touches.length > 1) {
                    return;
                }

                // 记录按下的时间
                startTime = Date.now();

                // 记录按下的坐标
                startX = e.touches[0].clientX;
                startY = e.touches[0].clientY;
            })

            // 离开
            dom.addEventListener("touchend", function (e) {
                // 判断手指的个数
                if (e.changedTouches.length > 1) {
                    return;
                }

                // 记录离开的时间
                var endTime = Date.now();

                // 判断
                if (endTime - startTime > 800) {
                    return;
                }

                // 先判断距离 再判断方向 如果 根本就没有产生距离 直接返回-不满足条件
                var endX = e.changedTouches[0].clientX;
                var endY = e.changedTouches[0].clientY;

                // 先判断水平方向有没有滑动 如果有 再判断 往左还是往右

                // 方向
                var direction;
                if (Math.abs(endX - startX) > 5) {
                    // 在水平方向上发生了移动 需要判断 左 还是右 滑
                    // 右滑动  结束的x坐标 大于 开始 x坐标
                    direction = endX > startX ? "right" : "left";
                } else if (Math.abs(endY - startY) > 5) {
                    // 在垂直方向上发生了移动 下滑动  还是上滑动

                    // 下滑  结束y 大于  开始的y坐标
                    direction = endY > startY ? "down" : "up";
                } else {
                    // 不满足 用户就没有滑动过
                    return;
                }

                // 执行自己的滑动的逻辑
                // console.log(direction);
                cb(direction);

            })

        }
    };
    return obj;
}
